package cn.tedu.csmall.product.web;

import lombok.Data;
import lombok.Getter;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)// 该注解可以实现【方法2】那样的setter方法，不影响@Data注解的getter，setter方法，只是多了一种选择
public class JsonResult implements Serializable {
    private Integer state;
    private String message;
    private Object data;

//    // 【方法1】全参构造器。Controller那边的代码就为        return new JsonResult(1,"添加成功！");
//    public JsonResult(Integer state, String message) {
//        this.state = state;
//        this.message = message;
//    }


//   // 【方法2】setter方法返回一个JsonResult对象。Controller那边的代码就为         return new JsonResult().setState(1).setMessage("添加成功！");
//    public JsonResult setState(Integer state) {
//        this.state = state;
//        return this;
//    }
//
//    public JsonResult setMessage(String message) {
//        this.message = message;
//        return this;
//    }

    // 【方法3】定义静态方法。Controller那边的代码就为        return JsonResult.success(); 或者 return JsonResult.failed(2,"相册名称被占用！");
    /**
     * 通用返回成功(不带业务数据)
     * @return
     */
    public static JsonResult success() {
        return new JsonResult()
                .setState(ServiceCode.OK.getState())
                .setMessage(ServiceCode.OK.getMessage());
    }

    /**
     * 通用返回成功(带业务数据)
     * @param data 业务数据
     * @return
     */
    public static JsonResult success(Object data) {
        return new JsonResult()
                .setState(ServiceCode.OK.getState())
                .setMessage(ServiceCode.OK.getMessage())
                .setData(data);
    }

    /**
     * 错误结果
     * @param serviceCode 结果状态码枚举
     * @return
     */
    public static JsonResult error(ServiceCode serviceCode) {
        return new JsonResult()
                .setState(serviceCode.getState())
                .setMessage(serviceCode.getMessage());
    }

    /**
     * 错误结果
     * @param serviceCode 结果状态码枚举
     * @return
     */
    public static JsonResult error(ServiceCode serviceCode, String msg) {
        return new JsonResult()
                .setState(serviceCode.getState())
                .setMessage(msg);
    }
}
